A distributed computer system may include multiple application servers running various applications distributed across multiple physical devices. In a distributed computer system, it is desirable that the distributed servers be centrally administrated. In addition, workload management and failover are preferably handled from a central location. Thus, a distributed computer system achieves the data processing power of multiple physical computers working in concert while preserving the benefits of the centralized administration of workload management.
In a typical distributed computer system, the base functional software unit is an application server. As used throughout this specification, an “application server” is a software environment provided to run or execute applications. An “application” is a collection of modules that collectively provide answers/responses to submitted requests. Thus, an application needs an environment to run, and an application server is that environment. An application is deployed in one or more application servers.
In a distributed computer system, multiple application servers can be functionally organized in various ways. For example, a subset of the total group of application servers in the system may be organized in a cluster. A “cluster” is a collection of servers, each running an instance of the same application. Clusters may be static or dynamic.
In addition, a subset of the total group of application servers within a distributed computer system may be managed as a group which is often called a “node”. Thus, a node is a managed entity where application servers run. The placement of the application servers of a given cluster onto nodes is either fixed by the user or changed dynamically, hence a static or dynamic cluster, respectively.
A “host” as used herein is a physical computing machine typically identified by an IP address. A host may house one or more nodes. Multiple nodes can be further collected into a single management domain which is often called a “cell”.
A distributed computer system will thus include several physical hosts. Typically, the hosts will be somewhat heterogeneous. For example, some hosts may be older than others, and thus have different hardware and software components. Other hosts may have differing architecture and/or bus configurations. Similarly, there may be an uneven amount of work assigned to each host, either relating to the number of application servers associated with the host or in the nature and extent of unmanaged work such as garbage collection, periodic data backups, and the starting and stopping of application servers. The most efficient data processing flow within a distributed computer system will occur if work is balanced among the various heterogeneous hosts according to the capabilities of the respective host members.
Similarly, in a distributed computing system it is advantageous to balance requests belonging to the same cluster among all nodes that can service the cluster. However, the characteristics of the various clusters within the system may vary in a significant way in terms of processing requirements. Furthermore, an application server instance that serves a given cluster on a node may share the resources of the node with servers serving other clusters.
Various simple load balancing routers that attempt to equalize processor utilization among all hosts in a cell are known. Similarly, somewhat dynamic performance balancing systems which attempt to load balance based upon measured server utilization are known. However, a simple load balancing router which attempts to equalize processor utilization among all hosts in a cell may not provide for equal performance among nodes servicing requests belonging to the same cluster, nor will a simple load balancing router effectively deal with the problem of heterogeneous hosts.
The present invention is directed toward overcoming one or more of the problems discussed above.